/* 导入axios */
import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'
import { Toast } from 'vant'
/* 创建instance实例 */
const instance = axios.create({
  //封装基地址
  baseURL: 'http://toutiao.itheima.net',
  timeout: 10000
})
import { getTokey,setTokey,removeTokey } from './token.js'

// 添加请求拦截器
instance.interceptors.request.use(
  function (config) {
    //如果有用户登录，就自动添加token
    if (getTokey()) {
      // config.headers = {
      //   //存储有两个token作为对象形式，所以需要点出来
      //   Authorization: `Bearer ${getTokey().token}`
      // }
      config.headers.Authorization = `Bearer ${getTokey().token}`
    }

    // 在发送请求之前做些什么
    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)
import router from '../router/index'

// 添加响应拦截器
instance.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    return response;
  }, 
  async function (error) {
    if(error.response.status == 401){
        if(getTokey()){
            try {
                const tokenRes = await axios({
                    url:'http://toutiao.itheima.net/v1_0/authorizations',
                    method:'put',
                    headers:{
                        Authorization: `Bearer ${getTokey().refresh_token}`
                    }
                })
                let newToken = getTokey()//先取出旧的token
                newToken.token = tokenRes.data.data.token//更新token
                setTokey(newToken)//存入更新的token
                //继续发送之前的请求信息
                return instance(error.config)
                
            } catch (error) {
                //失败：说明refresh过期，需要重新登录
                //弹窗提示
                Toast.fail('请重新登录')
                //移除token
                removeTokey()
                //跳转登录页
                router.push('/login')
            }
        }else{
          //弹窗提示
          Toast.fail('请重新登陆')
          //跳转登录页
          router.push('/login')
        }
    }else{
      //不是401错误不做处理
    }
    //手动清除控制台打印
    // setTimeout(() => {
    //   console.clear()
    // }, 2000);
    return Promise.reject(error);
  });

export default instance
